package studentManage.util;

import java.io.File;
import java.util.ArrayList;
import java.util.Scanner;

import Util.TestUtil;
import studentManage.model.MajorModel;
import studentManage.model.StudentModel;

public class StudentUtil {

	/**
	 * 学生集合
	 */
	public static ArrayList<StudentModel> students = new ArrayList<StudentModel>();

	/**
	 * 创建存放学生集合的文件
	 * 
	 * 路径
	 */
	static String path = TestUtil.creatPath("StudentManage","students");

	/**
	 * 存放当前登录的学生用户名
	 */
	private String user;

	static Scanner sc = new Scanner(System.in);

	/**
	 * 用户登录后的首页
	 */
	public void firstPage() {
		while (true) {
			System.out.println("**********************");
			System.out.println("请选择：");
			System.out.println("1-查看个人信息");
			System.out.println("2-修改个人信息");
			System.out.println("3-退出登录");
			System.out.println("**********************");
			int key = TestUtil.abnormal();

			if (key == 3) {
				break;
			}

			switch (key) {
			case 1:
				info(selectSelf(user));
				break;
			case 2:
				alert(user);
			default:
				break;
			}
			System.out.println("点击回车继续...");
			sc.nextLine();
		}
	}

	/**
	 * 登录
	 */
	public void login() {
		System.out.println("=========登录=========");

		System.out.print("请输入用户名：");
		String user = sc.nextLine();
		System.out.print("请输入密码：");
		String pass = sc.nextLine();

		if (check(user, pass)) {
			this.user = user;
			System.out.println("登录成功！");
			firstPage();
			return;
		}
		System.out.println("用户名或密码错误！");

	}

	/**
	 * 核实用户名密码是否正确
	 * 
	 * @param user
	 * @param pass
	 * @return
	 */
	public boolean check(String user, String pass) {
		for (StudentModel stu : students) {
			if (stu.getUser().equals(user) && stu.getPass().equals(pass)) {
				return true;
			}
		}
		return false;
	}

	/**
	 * 注册
	 */
	public void regist() {
		MajorUtil majorUtil = new MajorUtil();

		System.out.println("=========注册=========");

		System.out.print("请输入id：");
		int id = TestUtil.abnormal();

		System.out.print("请输入用户名：");
		String user = sc.nextLine();

		System.out.print("请输入密码：");
		String pass = sc.nextLine();

		System.out.print("请输入姓名：");
		String name = sc.nextLine();

		System.out.print("请输入性别：");
		String sex = sc.nextLine();

		majorUtil.selectAll();
		System.out.print("请输入专业代号：");
		String majCode = sc.nextLine();

		if (majorUtil.exisit(majCode)) {// 输入的专业代号存在
			StudentModel stu = new StudentModel();
			stu.setId(id);
			stu.setUser(user);
			stu.setPass(pass);
			stu.setName(name);
			stu.setSex(sex);
			stu.setMajCode(majCode);

			students.add(stu);

			MajorModel majorModel = majorUtil.select(majCode);// 找到这个专业
			majorModel.setStuId(String.valueOf(id));
			TestUtil.write(MajorUtil.path, MajorUtil.majors);

			TestUtil.write(path, students);// 序列化

			System.out.println("注册成功！");
			info(stu);
			return;
		}

		System.out.println("您输入的专业不存在，注册失败！");

	}

	/**
	 * 管理员修改用户信息
	 */
	public void adminUpdate() {
		System.out.println("请输入您要修改的用户信息（用户名）：");
		String user = sc.nextLine();
		alert(user);
	}

	/**
	 * 修改个人信息
	 */
	public void alert(String user) {
		StudentModel stu = selectSelf(user);
		update(stu);
	}

	/**
	 * 全部学生信息
	 */
	public void selectAll() {
		for (StudentModel stu : students) {
			info(stu);
		}
	}

	/**
	 * 详细信息
	 * 
	 * @param stu
	 */
	public void info(StudentModel stu) {
		System.out.println("-----------------");
		System.out.println("用户名：" + stu.getUser());
		System.out.println("姓名：" + stu.getName());
		System.out.println("性别：" + stu.getSex());
		System.out.println("专业：" + stu.getMajCode());
		System.out.println("-----------------");
	}

	/**
	 * 根据学生姓名查找学生
	 */
	public void selectByName() {
		System.out.print("请输入您要查找的学生姓名：");
		String name = sc.nextLine();

		for (StudentModel stu : students) {
			if (stu.getName().equals(name)) {
				info(stu);
			}
		}
	}

	/**
	 * 根据用户名查询信息
	 */
	public StudentModel selectSelf(String user) {
		for (StudentModel stu : students) {
			if (stu.getUser().equals(user)) {
				return stu;
			}
		}
		return null;
	}

	public StudentModel selectById(int id) {
		for(StudentModel stu:students) {
			if(stu.getId()==id) {
				return stu;
			}
		}
		return null;
	}
	
	/**
	 * 修改学生信息
	 * 
	 * @param stu
	 */
	public void update(StudentModel stu) {
		info(stu);

		System.out.print("请输入您要修改的用户名：");
		String user = sc.nextLine();

		System.out.print("请输入您要修改的密码：");
		String pass = sc.nextLine();

		System.out.print("请输入您要修改的姓名：");
		String name = sc.nextLine();

		System.out.print("请输入您要修改的性别：");
		String sex = sc.nextLine();

		stu.setUser(user);
		stu.setPass(pass);
		stu.setName(name);
		stu.setSex(sex);

		// 将专业中的学生信息修改
//		MajorUtil majorUtil = new MajorUtil();
//		MajorModel maj = majorUtil.select(stu.getMajCode());// 找到这个用户所在专业
//		String s = maj.getStuId(1);
//		System.out.println(s+"s");
		//maj.setStuId();

		this.user = stu.getUser();// 将当前登录对象修改为更改后的用户名
		// 若用户名已经存在，则会自动生成一个新的用户名，将当前登录的用户名修改为修改后的用户名

		TestUtil.write(path, students);
	}

	/**
	 * 初始化一个数据
	 */
	public static void init() {

		StudentModel stu = new StudentModel();
		stu.setId(1);
		stu.setMajCode("s0001");
		stu.setName("光头强");
		stu.setSex("男");
		stu.setUser("210001");
		stu.setPass("123456");
		students.add(stu);

		TestUtil.write(path, students);
	}

	/**
	 * 反序列化
	 */
	static {
		judge();
		students = TestUtil.read(path);
	}

	/**
	 * 判断文件内容是否为空
	 * 
	 * 为空：初始化一个数据
	 */
	public static void judge() {
		File f = new File(path);
		if (f.length() == 0) {
			init();
		}
	}

}
